/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Reportes.DAO;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pe.edu.pucp.Modelo.Aeropuerto;
import pe.edu.pucp.Modelo.AeropuertoSim;
import pe.edu.pucp.Modelo.Avion;
import pe.edu.pucp.Modelo.AvionSim;
import pe.edu.pucp.Modelo.Ciudad;
import pe.edu.pucp.Modelo.Continente;
import pe.edu.pucp.Modelo.Pais;
import pe.edu.pucp.Modelo.Pronostico;
import pe.edu.pucp.Modelo.PronosticoSim;
import pe.edu.pucp.Modelo.Vuelo;
import pe.edu.pucp.Modelo.VueloSim;
import pe.edu.pucp.Util.HibernateUtil;
import pe.edu.pucp.Util.Utilitario;

/**
 *
 * @author jorge
 */
public class ReporteSaturacionDAO {
    
    public ArrayList<Vuelo> ConsultaObtenerSaturacionVuelo(int aini, int mini, int afin, int mfin,double porcentaje)
    {
        ArrayList<Aeropuerto>  aeropuertosInicio = new ArrayList<>();
        ArrayList<Aeropuerto>  aeropuertosFIn = new ArrayList<>();
        ArrayList<Vuelo>  Vuelos = new ArrayList<>();
        ArrayList<Vuelo>  VuelosSalida = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        
        String q = "select a from Aeropuerto a";
        Query query = session.createQuery(q);
        List lista = query.list();
        Iterator iter = lista.iterator(); 
            
            while (iter.hasNext()) {    
                Aeropuerto a = (Aeropuerto) iter.next();
                if(iter.hasNext()) {
                   Aeropuerto b = (Aeropuerto) iter.next();
                    Hibernate.initialize(a.getCiudad());
                    aeropuertosInicio.add(a);
                    aeropuertosFIn.add(b);
                } else break;
            }
            

        q = "select v from Vuelo v";
        query = session.createQuery(q);
        lista = query.list();
        iter = lista.iterator();             
        
        while (iter.hasNext()) {    
                Vuelo a = (Vuelo) iter.next();
                Vuelos.add(a);
            Hibernate.initialize(a.getAeropuertoByIddestino());
            Hibernate.initialize(a.getAeropuertoByIdorigen());
            Hibernate.initialize(a.getAvion());
            Hibernate.initialize(a.getAeropuertoByIddestino().getCiudad());
            Hibernate.initialize(a.getAeropuertoByIdorigen().getCiudad());
            Hibernate.initialize(a.getAeropuertoByIddestino().getEstadoAeropuerto());
            Hibernate.initialize(a.getAvion().getTipoAvion());
        }
            
       for(Vuelo v : Vuelos)
       {
           boolean entrar=true;
           if(EstaElVuelo(VuelosSalida,v))
           {
               // si esta ese vuelo
               double j =1.0* v.getNumpack()/v.getAvion().getTipoAvion().getCappack();

               if(j>=porcentaje)
               {
                   ActualizarVueloTodo(VuelosSalida,v);
                   entrar = false;
               }
               else
               {
                   ActualizarVueloParcial(VuelosSalida,v);
                   entrar = false;
               }
           }
            if(entrar){
                Vuelo salida = new Vuelo();
                salida.setIdvuelo(v.getIdvuelo());
                salida.setAeropuertoByIddestino(v.getAeropuertoByIddestino());
                salida.setAeropuertoByIdorigen(v.getAeropuertoByIdorigen());
                Avion avion = new Avion();
                avion.setTipoAvion(v.getAvion().getTipoAvion());
                avion.setEstadoAvion(v.getAvion().getEstadoAvion());
                avion.setIdavion(v.getAvion().getIdavion());
                salida.setAvion(avion);
                salida.setNumpack(1);
                salida.setCosto(1.0);
                VuelosSalida.add(salida);
            }
       }
       
       return VuelosSalida;
    }
    
    private void ActualizarVueloTodo(ArrayList<Vuelo> l, Vuelo v)
    {
        // cumple la division
        ArrayList<Vuelo>  temp = new ArrayList<>();
        
        for(Vuelo f : l)
        {
            if((f.getAeropuertoByIddestino().getIdaeropuerto()==v.getAeropuertoByIddestino().getIdaeropuerto()) && f.getAeropuertoByIdorigen().getIdaeropuerto()==v.getAeropuertoByIdorigen().getIdaeropuerto())
            {
                Vuelo x = new Vuelo();
                x.setAeropuertoByIddestino(f.getAeropuertoByIddestino());
                x.setAeropuertoByIdorigen(f.getAeropuertoByIdorigen());
                Avion avion = new Avion();
                avion.setTipoAvion(f.getAvion().getTipoAvion());
                avion.setEstadoAvion(f.getAvion().getEstadoAvion());
                avion.setIdavion(f.getAvion().getIdavion());
                x.setAvion(avion);
                x.setEstadoVuelo(f.getEstadoVuelo());
                x.setNumpack(f.getNumpack()+1);
                x.setCosto(f.getCosto()+1);                        
                        
                temp.add(x);
            }else
            {
                Vuelo x = new Vuelo();
                x.setAeropuertoByIddestino(f.getAeropuertoByIddestino());
                x.setAeropuertoByIdorigen(f.getAeropuertoByIdorigen());
                Avion avion = new Avion();
                avion.setTipoAvion(f.getAvion().getTipoAvion());
                avion.setEstadoAvion(f.getAvion().getEstadoAvion());
                avion.setIdavion(f.getAvion().getIdavion());
                x.setAvion(avion);
                x.setEstadoVuelo(f.getEstadoVuelo());
                x.setNumpack(f.getNumpack());
                x.setCosto(f.getCosto());  
                temp.add(x);
            }
        }
        
        l.clear();
        for(Vuelo f:temp)
        {
            l.add(f);
        }
    }
    
    private void ActualizarVueloParcial(ArrayList<Vuelo> l, Vuelo v)
    {
        // no cumple la division
        ArrayList<Vuelo>  temp = new ArrayList<>();
        
        for(Vuelo f : l)
        {
            if((f.getAeropuertoByIddestino().getIdaeropuerto()==v.getAeropuertoByIddestino().getIdaeropuerto()) && f.getAeropuertoByIdorigen().getIdaeropuerto()==v.getAeropuertoByIdorigen().getIdaeropuerto())
            {
                Vuelo x = new Vuelo();
                x.setAeropuertoByIddestino(f.getAeropuertoByIddestino());
                x.setAeropuertoByIdorigen(f.getAeropuertoByIdorigen());
                Avion avion = new Avion();
                avion.setTipoAvion(f.getAvion().getTipoAvion());
                avion.setEstadoAvion(f.getAvion().getEstadoAvion());
                avion.setIdavion(f.getAvion().getIdavion());
                x.setAvion(avion);
                x.setEstadoVuelo(f.getEstadoVuelo());
                x.setNumpack(f.getNumpack());
                x.setCosto(f.getCosto()+1);                        
                temp.add(x);
            }else
            {
                Vuelo x = new Vuelo();
                x.setAeropuertoByIddestino(f.getAeropuertoByIddestino());
                x.setAeropuertoByIdorigen(f.getAeropuertoByIdorigen());
                Avion avion = new Avion();
                avion.setTipoAvion(f.getAvion().getTipoAvion());
                avion.setEstadoAvion(f.getAvion().getEstadoAvion());
                avion.setIdavion(f.getAvion().getIdavion());
                x.setAvion(avion);
                x.setEstadoVuelo(f.getEstadoVuelo());
                x.setNumpack(f.getNumpack());
                x.setCosto(f.getCosto());  
                temp.add(x);
            }
        }
        
        l.clear();
        for(Vuelo f:temp)
        {
            l.add(f);
        }
    }    
    
    private boolean EstaElVuelo(ArrayList<Vuelo> l, Vuelo v)
    {
           for(int i=0;i<l.size();i++)
            {
                if((l.get(i).getAeropuertoByIddestino().getIdaeropuerto()==v.getAeropuertoByIddestino().getIdaeropuerto()) && l.get(i).getAeropuertoByIdorigen().getIdaeropuerto()==v.getAeropuertoByIdorigen().getIdaeropuerto())
                {
                    return true;
                }
            }
        
        return false;
    }
    
    public ArrayList<Aeropuerto> ConsultaObtenerSaturacion(int aini, int mini, int afin, int mfin,double porcentaje)
    {
        ArrayList<Aeropuerto>  salida = new ArrayList<>();
        ArrayList<Aeropuerto>  aeropuertos = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        
        Utilitario U = new Utilitario();
                    
        String q = "select a from Aeropuerto a";
        Query query = session.createQuery(q);
        List lista = query.list();
            Iterator iter = lista.iterator(); 
            
            while (iter.hasNext()) {    
                Aeropuerto a = (Aeropuerto) iter.next();
                Hibernate.initialize(a.getCiudad());
                Hibernate.initialize(a.getEstadoAeropuerto());
                Hibernate.initialize(a.getCiudad().getPais());
                aeropuertos.add(a);
            }
            
            tx.commit();
               
        int n = -(aini*100 +mini)+(afin*100+mfin)+1; // numero de meses a analizar
        
        Calendar dinicio = new GregorianCalendar();
        dinicio.set(aini, mini-1, 1,0,0,0);
                        
        for(int i=0; i<n;i++)
        {
            Calendar dfin = new GregorianCalendar();
            
            if(((mini+i)==1)||((mini+i)==3)||((mini+i)==5)||((mini+i)==7)||((mini+i)==8)||((mini+i)==10)||((mini+i)==12))
            {
                dfin.set(aini, mini+i-1, 31,0,0,0);                
            }
            if(((mini+i)==4)||((mini+i)==6)||((mini+i)==9)||((mini+i)==11))
            {
                dfin.set(aini, mini+i-1, 30,0,0,0); 
            }
            if((mini+i)==2)
            {
                dfin.set(aini, mini+i-1, 28,0,0,0); 
            }
                    
                for(Aeropuerto a : aeropuertos)
                {
                    q = "select P from Pronostico P "
                        + "where P.aeropuerto.idaeropuerto = "+a.getIdaeropuerto()+" and "
                        + "P.fechareg > '"+U.convertirDateToString(dinicio.getTime())+"' and P.fechareg < '"+U.convertirDateToString(dfin.getTime())+"' and "
                        + "P.nropack > "+porcentaje+" * xxxxxxxxx";
            
                    Aeropuerto uno = new Aeropuerto();
                    uno.setIdaeropuerto(a.getIdaeropuerto());
                    uno.setDescripcion(a.getDescripcion());
                    uno.setNumpack(a.getNumpack());
                    q=q.replace("xxxxxxxxx", String.valueOf(a.getCappack()));
                                        
                    query = session.createQuery(q);
                    
                    lista = query.list();
                    iter = lista.iterator();
                    
                    double nropackAcumulado=0;
                    double capacidadAeropuerto =0;
                    
                    while (iter.hasNext()) {    
                        Pronostico p = (Pronostico) iter.next();
                        Hibernate.initialize(a.getIdaeropuerto());
                        Hibernate.initialize(a.getCiudad());
                        Hibernate.initialize(a.getCiudad().getPais());
                        uno.setCiudad(p.getAeropuerto().getCiudad());
                        uno.setIdaeropuerto(p.getAeropuerto().getIdaeropuerto());
                        nropackAcumulado+=p.getNropack();
                        capacidadAeropuerto+=a.getCappack();
                    }
                    
                    if (capacidadAeropuerto!=0)
                    {
                        GregorianCalendar cal = new GregorianCalendar();
                            cal.set(aini,mini+i-1,1,0,0,0);
                            uno.setFechareg(cal.getTime());
                            uno.setCostpack(Math.round((100)*(nropackAcumulado/capacidadAeropuerto)));
                            uno.setCappack(a.getCappack());
                            salida.add(uno);
                    }
               }
            dinicio.set(aini,mini+i,1);
        }   
        return salida;
    }

    public ArrayList<Continente> listarContinente(){
        ArrayList<Continente> listaContinente = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
                    
        String q = "select ct from Continente ct order by ct.idcontinente"; 
        
        Query query = session.createQuery(q);    
        List lista = query.list();
        Iterator iter = lista.iterator(); 
        while (iter.hasNext()) {    
            Continente a = (Continente) iter.next();
            listaContinente.add(a);
        }
        
        tx.commit();
        session.close();

        return listaContinente;
    }      
            
   
    public ArrayList<Pais> listarPais(int idcont){
        ArrayList<Pais> listaPais = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        
        String q = "select p from Pais p where p.continente.idcontinente = :id order by p.idpais";        
        
        Query query = session.createQuery(q);       
        query.setInteger("id", idcont);
        List lista = query.list();
        Iterator iter = lista.iterator();        
        while (iter.hasNext()) {    
            Pais a = (Pais) iter.next();
            Hibernate.initialize(a.getContinente());
            listaPais.add(a);
        }
        
        tx.commit();
        session.close();

        return listaPais;
    }       
    
    public ArrayList<Ciudad> listarCiudad(int idpa){
        ArrayList<Ciudad> listaCiudad = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();

        String q = "select c from Ciudad c where c.pais.idpais = :id order by c.idciudad";         
        
        Query query = session.createQuery(q);          
        query.setInteger("id", idpa);
        List lista = query.list();        
        Iterator iter = lista.iterator(); 
        while (iter.hasNext()) {    
            Ciudad a = (Ciudad) iter.next();
            Hibernate.initialize(a.getPais());
            Hibernate.initialize(a.getPais().getContinente());
            listaCiudad.add(a);
        }
        
        tx.commit();
        session.close();

        return listaCiudad;
    }    
    
    public ArrayList<Aeropuerto> listarTodosAeropuertos(){
        ArrayList<Aeropuerto> listaAeropuerto = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        
        String q = "select a from Aeropuerto a";                    
        Query query = session.createQuery(q);        
        List lista = query.list();        
        Iterator iter = lista.iterator(); 
        while (iter.hasNext()) {    
            Aeropuerto a = (Aeropuerto) iter.next();
            Hibernate.initialize(a.getCiudad());
            Hibernate.initialize(a.getCiudad().getPais());
            Hibernate.initialize(a.getCiudad().getPais().getContinente());
            listaAeropuerto.add(a);
        }
        
        tx.commit();
        session.close();

        return listaAeropuerto;        
    }
    
    public ArrayList<Aeropuerto> listarAeropuerto(int idciu){
        ArrayList<Aeropuerto> listaAeropuerto = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        
        String q = "select a from Aeropuerto a where a.ciudad.idciudad = :id order by a.idaeropuerto";
        
        Query query = session.createQuery(q);        
        query.setInteger("id", idciu);
        List lista = query.list();        
        Iterator iter = lista.iterator(); 
        while (iter.hasNext()) {    
            Aeropuerto a = (Aeropuerto) iter.next();
            Hibernate.initialize(a.getCiudad());
            Hibernate.initialize(a.getCiudad().getPais());
            Hibernate.initialize(a.getCiudad().getPais().getContinente());
            listaAeropuerto.add(a);
        }
        
        tx.commit();
        session.close();

        return listaAeropuerto;
    }        
    
    public ArrayList<AeropuertoSim> ConsultaObtenerSaturacionSimulacion(int aini, int mini, int afin, int mfin, double porcentaje)
    {
        ArrayList<AeropuertoSim>  salidaSim = new ArrayList<>();
        ArrayList<AeropuertoSim>  aeropuertosSim = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        
        Utilitario U = new Utilitario();
                
        String q = "select a from AeropuertoSim a ";
        Query query = session.createQuery(q);
        List lista = query.list();
            Iterator iter = lista.iterator(); 
            
            while (iter.hasNext()) {    
                AeropuertoSim a = (AeropuertoSim) iter.next();
                aeropuertosSim.add(a);
            }
            
            tx.commit();
               
            int n = -(aini*100 +mini)+(afin*100+mfin)+1; // numero de meses a analizar
        
            Calendar dinicio = new GregorianCalendar();
            dinicio.set(aini, mini-1, 1,0,0,0);
                
        for(int i=1; i<=n;i++)
        {
            Calendar dfin = new GregorianCalendar();
            
            if(((mini+i)==1)||((mini+i)==3)||((mini+i)==5)||((mini+i)==7)||((mini+i)==8)||((mini+i)==10)||((mini+i)==12))
            {
                dfin.set(aini, mini+i-1, 31,0,0,0);                
            }
            if(((mini+i)==4)||((mini+i)==6)||((mini+i)==9)||((mini+i)==11))
            {
                dfin.set(aini, mini+i-1, 30,0,0,0); 
            }
            if((mini+i)==2)
            {
                dfin.set(aini, mini+i-1, 28,0,0,0); 
            }
                        
                for(AeropuertoSim aSim : aeropuertosSim)
                {
                   
                     q = "select P from PronosticoSim P "
                      + "where P.aeropuertoSim.idaeropuerto = "+aSim.getIdaeropuerto()+" and "
                      + "P.fechareg > '"+U.convertirDateToString(dinicio.getTime())+"' and P.fechareg < '"+U.convertirDateToString(dfin.getTime())+"' and "
                      + "P.nropack > "+porcentaje+" * xxxxxxxxx";
    
                     AeropuertoSim uno = new AeropuertoSim();
                     uno.setIdaeropuerto(aSim.getIdaeropuerto());
                     uno.setDescripcion(aSim.getDescripcion());
                     uno.setNumpack(aSim.getNumpack());
                     uno.setCiudad(aSim.getCiudad());
                     uno.setCappack(aSim.getCappack());
                     uno.setCostpack(aSim.getCostpack());
               
                     q=q.replaceAll("xxxxxxxxx",String.valueOf(aSim.getCappack()*porcentaje));
                     query = session.createQuery(q);
      
                    lista = query.list();
                    iter = lista.iterator();
                    
                    double nropackAcumulado=0;
                    double capacidadAeropuerto =0;
                        while (iter.hasNext()) {    
                            PronosticoSim p = (PronosticoSim) iter.next();
                            Hibernate.initialize(aSim.getIdaeropuerto());
                            uno.setIdaeropuerto(p.getAeropuertoSim().getIdaeropuerto());
                            nropackAcumulado+=p.getNropack();
                            capacidadAeropuerto+=aSim.getCappack();
                        }
                        if (capacidadAeropuerto!=0)
                        {
                            GregorianCalendar cal = new GregorianCalendar();
                            cal.set(aini,mini+i-1,1,0,0,0);
                            uno.setFechareg(cal.getTime());
                            uno.setCostpack(Math.round((100)*(nropackAcumulado/capacidadAeropuerto)));
                            salidaSim.add(uno);
                        }
                }
                dinicio=dfin;
        }   
        return salidaSim;
    }

     public ArrayList<VueloSim> ConsultaSaturacionVuelosSimulacion(int aini, int mini, int afin, int mfin,double porcentaje)
    {
        ArrayList<AeropuertoSim>  aeropuertosInicio = new ArrayList<>();
        ArrayList<AeropuertoSim>  aeropuertosFIn = new ArrayList<>();
        ArrayList<VueloSim>  Vuelos = new ArrayList<>();
        ArrayList<VueloSim>  VuelosSalida = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        
        String q = "select a from AeropuertoSim a";
        Query query = session.createQuery(q);
        List lista = query.list();
            Iterator iter = lista.iterator(); 
            
            while (iter.hasNext()) {    
                AeropuertoSim a = (AeropuertoSim) iter.next();
                if(iter.hasNext()) {
                   AeropuertoSim b = (AeropuertoSim) iter.next();
                    Hibernate.initialize(a.getCiudad());
    //                Hibernate.initialize(a.getVuelosForIddestino());
    //                Hibernate.initialize(a.getVuelosForIdorigen());
                    aeropuertosInicio.add(a);
                    aeropuertosFIn.add(b);
                } else break;
            }
            

        q = "select v from VueloSim v";
        query = session.createQuery(q);
        lista = query.list();
        iter = lista.iterator();             
        
        while (iter.hasNext()) {    
                VueloSim a = (VueloSim) iter.next();
                Vuelos.add(a);
            Hibernate.initialize(a.getAeropuertoSimByIddestino());
            Hibernate.initialize(a.getAeropuertoSimByIdorigen());
            Hibernate.initialize(a.getAvionSim());
            Hibernate.initialize(a.getAeropuertoSimByIddestino().getCiudad());
            Hibernate.initialize(a.getAeropuertoSimByIdorigen().getCiudad());
            Hibernate.initialize(a.getAeropuertoSimByIddestino().getEstadoAeropuerto());
            Hibernate.initialize(a.getAvionSim().getTipoAvion());
        }
            
       for(VueloSim v : Vuelos)
       {
           boolean entrar=true;
           if(EstaElVueloSim(VuelosSalida,v))
           {
               // si esta ese vuelo
               double j =1.0* v.getNumpack()/v.getAvionSim().getTipoAvion().getCappack();

               if(j>=porcentaje)
               {
                   ActualizarVueloTodoSim(VuelosSalida,v);
                   entrar = false;
               }
               else
               {
                   ActualizarVueloParcialSim(VuelosSalida,v);
                   entrar = false;
               }
           }
            if(entrar){
                VueloSim salida = new VueloSim();
                salida.setIdvuelo(v.getIdvuelo());
                salida.setAeropuertoSimByIddestino(v.getAeropuertoSimByIddestino());
                salida.setAeropuertoSimByIdorigen(v.getAeropuertoSimByIdorigen());
                AvionSim avion = new AvionSim();
                avion.setTipoAvion(v.getAvionSim().getTipoAvion());
                avion.setEstadoAvion(v.getAvionSim().getEstadoAvion());
                avion.setIdavion(v.getAvionSim().getIdavion());
                salida.setAvionSim(avion);
                salida.setNumpack(1);
                salida.setCosto(1.0);
                VuelosSalida.add(salida);
            }
       }
       
       return VuelosSalida;
    }
     
      private boolean EstaElVueloSim(ArrayList<VueloSim> l, VueloSim v)
    {
           for(int i=0;i<l.size();i++)
            {
                if((l.get(i).getAeropuertoSimByIddestino().getIdaeropuerto()==v.getAeropuertoSimByIddestino().getIdaeropuerto()) && l.get(i).getAeropuertoSimByIdorigen().getIdaeropuerto()==v.getAeropuertoSimByIdorigen().getIdaeropuerto())
                {
                    return true;
                }
            }
        
        return false;
    }
      
        private void ActualizarVueloTodoSim(ArrayList<VueloSim> l, VueloSim v)
    {
        // cumple la division
        ArrayList<VueloSim>  temp = new ArrayList<>();
        
        for(VueloSim f : l)
        {
            if((f.getAeropuertoSimByIddestino().getIdaeropuerto()==v.getAeropuertoSimByIddestino().getIdaeropuerto()) && f.getAeropuertoSimByIdorigen().getIdaeropuerto()==v.getAeropuertoSimByIdorigen().getIdaeropuerto())
            {
                VueloSim x = new VueloSim();
                x.setAeropuertoSimByIddestino(f.getAeropuertoSimByIddestino());
                x.setAeropuertoSimByIdorigen(f.getAeropuertoSimByIdorigen());
                AvionSim avion = new AvionSim();
                avion.setTipoAvion(f.getAvionSim().getTipoAvion());
                avion.setEstadoAvion(f.getAvionSim().getEstadoAvion());
                avion.setIdavion(f.getAvionSim().getIdavion());
                x.setAvionSim(avion);
                x.setEstadoVuelo(f.getEstadoVuelo());
                x.setNumpack(f.getNumpack()+1);
                x.setCosto(f.getCosto()+1);                        
                        
                temp.add(x);
            }else
            {
                VueloSim x = new VueloSim();
                x.setAeropuertoSimByIddestino(f.getAeropuertoSimByIddestino());
                x.setAeropuertoSimByIdorigen(f.getAeropuertoSimByIdorigen());
                AvionSim avion = new AvionSim();
                avion.setTipoAvion(f.getAvionSim().getTipoAvion());
                avion.setEstadoAvion(f.getAvionSim().getEstadoAvion());
                avion.setIdavion(f.getAvionSim().getIdavion());
                x.setAvionSim(avion);
                x.setEstadoVuelo(f.getEstadoVuelo());
                x.setNumpack(f.getNumpack());
                x.setCosto(f.getCosto());  
                temp.add(x);
            }
        }
        
        l.clear();
        for(VueloSim f:temp)
        {
            l.add(f);
        }
    }
        
    private void ActualizarVueloParcialSim(ArrayList<VueloSim> l, VueloSim v)
    {
        // no cumple la division
        ArrayList<VueloSim>  temp = new ArrayList<>();
        
        for(VueloSim f : l)
        {
            if((f.getAeropuertoSimByIddestino().getIdaeropuerto()==v.getAeropuertoSimByIddestino().getIdaeropuerto()) && f.getAeropuertoSimByIdorigen().getIdaeropuerto()==v.getAeropuertoSimByIdorigen().getIdaeropuerto())
            {
                VueloSim x = new VueloSim();
                x.setAeropuertoSimByIddestino(f.getAeropuertoSimByIddestino());
                x.setAeropuertoSimByIdorigen(f.getAeropuertoSimByIdorigen());
                AvionSim avion = new AvionSim();
                avion.setTipoAvion(f.getAvionSim().getTipoAvion());
                avion.setEstadoAvion(f.getAvionSim().getEstadoAvion());
                avion.setIdavion(f.getAvionSim().getIdavion());
                x.setAvionSim(avion);
                x.setEstadoVuelo(f.getEstadoVuelo());
                x.setNumpack(f.getNumpack());
                x.setCosto(f.getCosto()+1);                        
                temp.add(x);
            }else
            {
                VueloSim x = new VueloSim();
                x.setAeropuertoSimByIddestino(f.getAeropuertoSimByIddestino());
                x.setAeropuertoSimByIdorigen(f.getAeropuertoSimByIdorigen());
                AvionSim avion = new AvionSim();
                avion.setTipoAvion(f.getAvionSim().getTipoAvion());
                avion.setEstadoAvion(f.getAvionSim().getEstadoAvion());
                avion.setIdavion(f.getAvionSim().getIdavion());
                x.setAvionSim(avion);
                x.setEstadoVuelo(f.getEstadoVuelo());
                x.setNumpack(f.getNumpack());
                x.setCosto(f.getCosto());  
                temp.add(x);
            }
        }
        
        l.clear();
        for(VueloSim f:temp)
        {
            l.add(f);
        }
    }    
}
